<?php

namespace common\components\wechat\mp;

use yii\base\Model;

/**
 * 退款模型
 * @package common\components\wechat\components\mp
 */
class BuildAppPay extends Model {

    /**
     * 公众账号ID
     * 微信分配的公众账号ID（企业号corpid即为此appId）
     * @var String(32)
     */
    public $appid;

    /**
     * 商户号
     * 微信支付分配的商户号
     * @var String(32)
     */
    public $mch_id;

    /**
     * 设备号
     * 终端设备号(门店号或收银设备ID)，默认请传"WEB"
     * 否
     * @var String(32)
     */
    public $device_info;

    /**
     * 随机字符串
     * 随机字符串，不长于32位。推荐随机数生成算法
     * @var String(32)
     */
    public $nonce_str = null;

    /**
     * 签名
     * 签名，详见签名生成算法
     * @var String(32)
     */
    public $sign = null;

    /**
     * 签名类型
     * 签名类型，目前支持HMAC-SHA256和MD5，默认为MD5
     * 否
     * @var String(32)
     */
    public $sign_type;

    /**
     * 商品描述
     * 商品描述交易字段格式根据不同的应用场景按照以下格式：
     * APP——需传入应用市场上的APP名字-实际商品名称，天天爱消除-游戏充值。
     * @var String(128)
     */
    public $body;

    /**
     * 商品详情
     * 商品详细描述，对于使用单品优惠的商户，改字段必须按照规范上传，详见“单品优惠参数说明”
     * 否
     * @var String(8192)
     */
    public $detail;

    /**
     * 附加数据
     * 附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
     * 否
     * @var String(127)
     */
    public $attach;

    /**
     * 商户订单号
     * 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。
     * @var String(32)
     */
    public $out_trade_no;

    /**
     * 货币类型
     * 符合ISO 4217标准的三位字母代码，默认人民币：CNY，其他值列表详见货币类型
     * 否
     * @var String(16)
     */
    public $fee_type;

    /**
     * 订单金额
     * 订单总金额，单位为分，只能为整数，详见支付金额
     * @var Int
     */
    public $total_fee;

    /**
     * 终端IP
     * 用户端实际ip
     * @var String(16)
     */
    public $spbill_create_ip;

    /**
     * 交易起始时间
     * 订单生成时间，格式为yyyyMMddHHmmss，如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则
     * 否
     * @var String(14)
     */
    public $time_start;

    /**
     * 交易结束时间
     * 订单失效时间，格式为yyyyMMddHHmmss，如2009年12月27日9点10分10秒表示为20091227091010。
     * 订单失效时间是针对订单号而言的，由于在请求支付的时候有一个必传参数prepay_id只有两小时的有效期，
     * 所以在重入时间超过2小时的时候需要重新请求下单接口获取新的prepay_id。其他详见时间规则
     * 建议：最短失效时间间隔大于1分钟
     * 否
     * @var String(14)
     */
    public $time_expire;

    /**
     * 订单优惠标记
     * 订单优惠标记，代金券或立减优惠功能的参数，说明详见代金券或立减优惠
     * @var String(32)
     */
    public $goods_tag;

    /**
     * 通知地址
     * 接收微信支付异步通知回调地址，通知url必须为直接可访问的url，不能携带参数。
     * @var String(256)
     */
    public $notify_url;

    /**
     * 交易类型
     * 支付类型
     * @var String(16)
     */
    public $trade_type;

    /**
     * 指定支付方式
     * no_credit--指定不能使用信用卡支付
     * 否
     * @var String(32)
     */
    public $limit_pay;

    /**
     * 场景信息
     * 该字段用于统一下单时上报场景信息，目前支持上报实际门店信息。
     * {
     * "store_id": "", //门店唯一标识，选填，String(32)
     * "store_name":"”//门店名称，选填，String(64)
     * }
     * @var String(256)
     */
    public $scene_info;

    /**
     * @inheritdoc
     * @throws InvalidConfigException
     */
    public function init() {
        if ($this->nonce_str === null) {
            $this->setNonceStr();
        }
    }

    /**
     * 微信服务器请求签名检测
     * @param string $signature 微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
     * @param string $timestamp 时间戳
     * @param string $nonce 随机数
     * @return bool
     */
    public function setNonceStr($nonce_str = null) {
        if ($nonce_str === null) {
            $nonce_str = \common\helpers\Utils::random(32);
        }
        return $this->nonce_str = $nonce_str;
    }

}
